package com.base.search.impl.binarysearch;

import java.util.Arrays;

/**
 * TODO(825. 适龄的朋友)
 * 在社交媒体网站上有 n 个用户。给你一个整数数组 ages ，其中 ages[i] 是第 i 个用户的年龄。
 * <p>
 * 如果下述任意一个条件为真，那么用户 x 将不会向用户 y（x != y）发送好友请求：
 * <p>
 * age[y] <= 0.5 * age[x] + 7
 * age[y] > age[x]
 * age[y] > 100 && age[x] < 100
 * 否则，x 将会向 y 发送一条好友请求。
 * <p>
 * 注意，如果 x 向 y 发送一条好友请求，y 不必也向 x 发送一条好友请求。另外，用户不会向自己发送好友请求。
 * <p>
 * 返回在该社交媒体网站上产生的好友请求总数。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/friends-of-appropriate-ages
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author leon
 * @date 2021年12月27日 20:13
 */
public class NumFriendRequests {
        //    作者：LeetCode-Solution
        //    链接：https://leetcode-cn.com/problems/friends-of-appropriate-ages/solution/gua-ling-de-peng-you-by-leetcode-solutio-v7yk/
        //    来源：力扣（LeetCode）
        //    著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
        public int numFriendRequests(int[] ages) {
            int n = ages.length;
            Arrays.sort(ages);
            int left = 0, right = 0, ans = 0;
            for (int age : ages) {
                if (age < 15) {
                    continue;
                }
                while (ages[left] <= 0.5 * age + 7) {
                    ++left;
                }
                while (right + 1 < n && ages[right + 1] <= age) {
                    ++right;
                }
                ans += right - left;
            }
            return ans;
        }


}
